package com.learn.UnSafeCollection;

import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;

//  解决并发修改异常 java.util.ConcurrentModificationException !!
public class  ListTest{

    public static void main(String[] args) {
        /**
         *  List list = new ArrayList();
         *  并发下并不安全
         *
         *  解决方案
         *  1.List list = new Vector();
         *  2.List list = Collections.synchronizedList(new ArrayList<>());
         *  3.List list = new CopyOnWriteArrayList();
         *      CopyOnWrite  写入时复制  计算机领域的一种思想COW,旨在写入时唯一,为了写入时不被覆盖,
         *      提前复制一份,修改完在放回去达到数据一致   和读写分离的思想也是一致的
         *      CopyOnWrite比Vector 效率要高 因为Syn没有CAS效率高
         */
        List list = new CopyOnWriteArrayList();
        for (int i = 1; i <= 10; i++) {
            new Thread(()->{
                String substring = UUID.randomUUID().toString().substring(0,5);
                list.add(substring);
                System.out.println(list);
            },String.valueOf(i)).start();
        }
    }
}
